package com.qd.panda.mapper.stroke;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.qd.common.panda.domain.entity.order.*;
import com.qd.common.panda.domain.entity.stroke.UserStrokeOrderDTO;
import com.qd.panda.model.UserStrokeOrder;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户订单
 *
 * @author sjk
 */
public interface UserStrokeOrderMapper extends BaseMapper<UserStrokeOrder> {
    /**
     * 分页
     *
     * @param page  分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<UserStrokeOrderDTO> page(IPage<UserStrokeOrder> page, @Param(Constants.WRAPPER) Wrapper<UserStrokeOrder> query);

    /**
     * 查询未开始充电的订单（需要人工start的订单）
     *
     * @param userId 人员ID
     * @param parkId 停车场ID
     * @return 订单
     */
    UserStrokeOrderDTO getUserStrokeByState(@Param("userId") String userId, @Param("parkId") String parkId);

    /**
     * 分页
     *
     * @param page     分页属性
     * @param query    查询条件
     * @param tripType 行程类型
     * @return 数据
     */
    IPage<UserStrokeOrderDisplayDTO> getOrderPage(IPage<UserStrokeOrderDisplayDTO> page, @Param(Constants.WRAPPER) Wrapper<UserStrokeOrderQueryDTO> query, @Param("tripType") Integer tripType);

    /**
     * 用户订单分页
     *
     * @param page  分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<OrderDTO> userOrderPage(IPage<OrderDTO> page, @Param(Constants.WRAPPER) Wrapper<OrderQueryDTO> query);

    /**
     * 订单统计
     *
     * @param query    查询条件
     * @param tripType 行程类型
     * @return 订单统计信息
     */
    OrderStatisticsDTO totalOrderStatistics(@Param(Constants.WRAPPER) Wrapper<UserStrokeOrderQueryDTO> query, @Param("tripType") Integer tripType);
    /**
     * 退款订单统计
     * @param query 查询条件
     * @param tripType 行程类型
     * @return 订单统计信息
     */
    OrderStatisticsDTO totalOrderRefundStatistics(@Param(Constants.WRAPPER) Wrapper<UserStrokeOrderQueryDTO> query, @Param("tripType") Integer tripType);
    /**
     * 传入主键判断这些主键是否在数据表中
     *
     * @param ids 传入主键
     * @return 返回存在的主键
     */
    List<String> getIds(@Param("ids") List<String> ids);

    /**
     * 获得当前行程下面已经缴费的订单总额
     *
     * @param sid 行程ID
     * @return 订单总额
     */
    BigDecimal sumOrders(@Param("sid") String sid);

    /**
     * 查询优惠总金额
     *
     * @param query 查询条件
     * @return 总金额
     */
    TotalPreferentialAmountDTO totalPreferentialAmount(@Param(Constants.WRAPPER) Wrapper<OrderQueryDTO> query);
    /**
     * 加油订单数量
     * @param query 查询条件
     * @return 数量
     */
    Long countGasOrder(@Param(Constants.WRAPPER) Wrapper<Object> query);

    /**
     * 商城订单
     * @param page 分页对象
     * @param query 查询参数
     * @return 列表
     */
    IPage<MallOrderDTO> orderMallPage(IPage<MallOrderDTO> page, @Param(Constants.WRAPPER) Wrapper<MallOrderQueryDTO> query);
}